
前端nginx-master(主服务器)挂后,备用服务器nginx-backup可以继续提供服务,如图:

实战:
环境:
|
|
centos 7.4 前端: master: 192.168.1.4 backup: 192.168.1.5 后端服务: A: 192.168.1.6 B: 192.168.1.7 |
一、master和backup两台服务器均安装上keepalived和nginx服务:
yum install keepalived nginx -y
master端配置keepalived:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
cp /etc/keepalived/keepalived.conf{,.bak} vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from lutixia@163.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script check_nginx { script "/data/sh/check_nginx.sh" interval 2 #weight -20 #因为脚本中设置为keepalived会随着nginx服务的关闭而关闭,所以权重不设置也可以。 #如果想让权重生效,脚本中不应该直接杀掉keepalived服务,而是设置退出状态为非0,一旦检测nginx服务退出,则减20 } # VIP1 vrrp_instance VI_1 { state MASTER interface ens32 virtual_router_id 51 priority 90 advert_int 5 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.200/24 label ens32:0 } track_script { check_nginx } } |
backup端配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
cp /etc/keepalived/keepalived.conf{,.bak} vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from lutixia@163.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script check_nginx { script "/data/sh/check_nginx.sh" interval 2 # weight -20 } # VIP1 vrrp_instance VI_1 { state BACKUP interface ens32 virtual_router_id 51 priority 80 advert_int 5 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.200/24 label ens32:0 } track_script { check_nginx } } |
二、master和backup两台服务器均在指定目录配置好检测脚本:
|
|
mkdir -p /data/sh vim /data/sh/check_nginx.sh #!/bin/bash #by lutixia ############## killall -0 nginx if [ $? -ne 0 ];then systemctl stop keepalived fi |
三、master和backup两台服务器均配置好负载均衡:
|
|
#在http指令块添加upstream: upstream web { server 192.168.1.6 max_fails=3 fail_timeout=9s; server 192.168.1.7 max_fails=3 fail_timeout=9s; } #在server指令块添加proxy相关指令: server { listen 80; server_name localhost; location / { proxy_pass http://web; proxy_next_upstream error http_404 http_502; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } |
四、master和backup端均启动nginx与keepalived服务,检查vip是否正常:
|
|
systemctl start nginx && systemctl start keepalived |
在master端看到vip是否正常绑定:

现在关掉master端的nginx服务,看vip是否正常漂移:

在backup端查看vip,可以看到已经绑定成功!:

五、vip正常绑定和漂移,现在验证负载均衡能否正常实现:
在master访问1.200的80端口:

能正常访问!现在在将master启动,把vip抢回来(默认是抢占模式)

nginx的高可用就说到这,keepalived配置还有很多地方没有说到,后面慢慢说。
来源:nginx入门详解(十)- keepalived高可用 - 知乎 (zhihu.com)
拓展:
虚拟IP与公网IP
虚拟IP必须要与nginx+keeplived机器上的真正ip在同网段才行,在局域网中,vip很好设置,直接找一个不使用的ip就可以,但是在公网环境中就不能随意设置
网上找到的方案:
- 场景1: 因为必须相同网段,所以至少三个公网ip,2个给keepalived+nginx的物理机,1个配置在keepalived中作为vip,
域名解析绑定在你的VIP上
- 场景2: 一般对外服务都有一层防火墙,所以可以只申请一个公网ip,然后在局域网环境中搭建keepalived和内网的vip,然后通过防火墙的NAT将公网ip映射到内网的虚拟ip
- 场景3: 有人尝试过利用与服务器不是同一个网段的外网IP做VIP,功能也正常
- 场景4: 不设置防火墙,两台主机,分别配置了独立的外网ip,同时申请了第三个公网ip作为vip(
虚拟ip也必须是注册在互联网上服务器的唯一可用IP地址),不能使用两个主机的独立外网ip作为虚拟ip,绝对不能使用外网网卡中唯一的真正的公网IP来作为vip,不然当vip切换的时候,外网网卡中唯一的真正的公网IP就会变会被注册到别的机器上,那么便无法访问原主机了。因此只能使用通过路由创建出来的公网IP来作为vip
nginx双机高可用
nginx双机高可用一般是通过虚拟IP(飘移IP)方法来实现的,目前分为两种:
- Nginx+keepalived 双机主从模式:即前端使用两台服务器,一台主服务器和一台热备服务器,正常情况下,
主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态;当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;但是热备服务器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠
- Nginx+keepalived 双机主主模式:即前端使用两台负载均衡服务器,互为主备,且都处于活动状态,同时
各自绑定一个公网虚拟IP,提供负载均衡服务;当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP(这时由非故障机器一台负担所有的请求)。这种方案,经济实惠,非常适合于当前架构环境
nginx+keepalived(主从模式)
这种方案使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠
nginx+keepalived(双主模式)
这种方案使用两个vip地址,前端使用2台机器,两个机器互为主备,最后把域名DNS服务器解析至两个Virtual IP即可,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担
链接:https://juejin.cn/post/6971589043352305678
「三年博客,如果觉得我的文章对您有用,请帮助本站成长」
共有 0 - keepalived热备实现高可用